package com.didi.gulimall.config;

import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author 10626
 * @Create 2021/6/7 13:46
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "gulimall.alipay")
public class AlipayProperties {
    /**
     * //在支付宝创建的应用的id
     */
    private String appId;

    /**
     * // 商户私钥，您的PKCS8格式RSA2私钥
     */
    private String merchantPrivateKey;
    /**
     * // 支付宝公钥,查看地址：https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
     */
    private String alipayPublicKey;
    /**
     * // 服务器[异步通知]页面路径  需http://格式的完整路径，不能加?id=123这类自定义参数，必须外网可以正常访问
     * // 支付宝会悄悄的给我们发送一个请求，告诉我们支付成功的信息
     */
    private String notifyUrl;
    /**
     * 通信协议
     */
    private String protocol;

    /**
     * // 页面跳转同步通知页面路径 需http://格式的完整路径，不能加?id=123这类自定义参数，必须外网可以正常访问
     * //同步通知，支付成功，一般跳转到成功页
     */
    private String returnUrl;

    /**
     * // 签名方式
     */
    private String signType = "RSA2";

    /**
     * // 字符编码格式
     */
    private String charset = "utf-8";

    private String timeout = "30m";

    /**
     * // 支付宝网关； https://openapi.alipaydev.com/gateway.do
     */
    private String gatewayUrl;

    @Bean
    public Config config(AlipayProperties alipayProperties) {
        Config config = new Config();
        config.protocol = alipayProperties.getProtocol();

        config.gatewayHost = alipayProperties.getGatewayUrl();

        config.signType = alipayProperties.getSignType();

        config.appId = alipayProperties.getAppId();

        // 为避免私钥随源码泄露，推荐从文件中读取私钥字符串而不是写入源码中
        config.merchantPrivateKey =alipayProperties.getMerchantPrivateKey();

        //注：如果采用非证书模式，则无需赋值上面的三个证书路径，改为赋值如下的支付宝公钥字符串即可
        config.alipayPublicKey = alipayProperties.getAlipayPublicKey();

        //可设置异步通知接收服务地址（可选）
        config.notifyUrl = alipayProperties.getNotifyUrl();

        return config;
    }
}
